Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
C# / VB.NET - [C#] Problema con PropertyGrid
Forum - C# / VB.NET - [C#] Problema con PropertyGrid

Avatar
balto (Ex-Member)
Rookie


Messaggi: 44
Iscritto: 03/11/2009

Segnala al moderatore
Postato alle 23:17
Martedì, 19/01/2010
Salve ragazzi, sto scrivendo un programma che utilizza un controllo PropertyGrid al fine di permettere all' utente di settare determinate proprietà. Ho fatto tutto perchè la PropertyGrid sia pronta e funziona tutto correttamente. L' unico problema è che io vorrei modificare la proprietà ReadOnlyAttribute di un elemento della PropertyGrid al variare di un altro.
Ad esempio, nella PropertyGrid ho un integer (Count) e una string(Name). Vorrei che se Count ha un certo valore, allora Name è ReadOnly, altrimenti no. Come potrei fare?

Il codice per ora è questo(solo il frammento relativo alla PropertyGrid):

Codice sorgente - presumibilmente C#

  1. public class ColumnsChartProperties
  2.     {
  3.         private int _Count = 1;
  4.         private string _FirstColumnText = "Prima Colonna", _SecondColumnText = "Seconda Colonna", _ThirdColumnText = "Terza Colonna", _FourthColumnText = "Quarta Colonna";
  5.         private List<float> _FirstColumnValues = new List<float>();
  6.         private List<float> _SecondColumnValues = new List<float>();
  7.         private List<float> _ThirdColumnValues = new List<float>();
  8.         private List<float> _FourthColumnValues = new List<float>();
  9.         private List<Color> _ColumnsColors = new List<Color>();
  10.  
  11.         private string _YAxeText = "Ordinate";
  12.         private int _MinimumValue = 0, _MaximumValue = 100, _IncrementValue = 10;
  13.  
  14.         private string _XAxeText = "Ascisse";
  15.         private List<string> _XAxeValues = new List<string>();
  16.  
  17.         [CategoryAttribute("Generale"), DescriptionAttribute("Il numero di colonne diverse. Deve essere compreso tra 1 e 4."), DefaultValueAttribute(1)]
  18.         public int Tipi
  19.         {
  20.             get { return _Count; }
  21.             set
  22.             {
  23.                 if (value > 0 && value <= 4)
  24.                     _Count = value;
  25.                 else
  26.                     _Count = 1;
  27.             }
  28.         }
  29.  
  30.         [CategoryAttribute("Prima Colonna"), DescriptionAttribute("Il testo da visualizzare nelle proprietà relative alla colonna."), DefaultValueAttribute("Prima Colonna")]
  31.         public string TestoPrimaColonna
  32.         {
  33.             get { return _FirstColumnText; }
  34.             set
  35.             {
  36.                 if (value == "")
  37.                     _FirstColumnText = "Prima Colonna";
  38.                 else
  39.                     _FirstColumnText = value;
  40.             }
  41.         }
  42.  
  43.         [CategoryAttribute("Seconda Colonna"), DescriptionAttribute("Il testo da visualizzare nelle proprietà relative alla colonna."), DefaultValueAttribute("Seconda Colonna")]
  44.         public string TestoSecondaColonna
  45.         {
  46.             get { return _SecondColumnText; }
  47.             set
  48.             {
  49.                 if (value == "")
  50.                     _SecondColumnText = "Seconda Colonna";
  51.                 else
  52.                     _SecondColumnText = value;
  53.             }
  54.         }
  55.  
  56.         [CategoryAttribute("Terza Colonna"), DescriptionAttribute("Il testo da visualizzare nelle proprietà relative alla colonna."), DefaultValueAttribute("Terza Colonna")]
  57.         public string TestoTerzaColonna
  58.         {
  59.             get { return _ThirdColumnText; }
  60.             set
  61.             {
  62.                 if (value == "")
  63.                     _ThirdColumnText = "Terza Colonna";
  64.                 else
  65.                     _ThirdColumnText = value;
  66.             }
  67.         }
  68.  
  69.         [CategoryAttribute("Quarta Colonna"), DescriptionAttribute("Il testo da visualizzare nelle proprietà relative alla colonna."), DefaultValueAttribute("Quarta Colonna")]
  70.         public string TestoQuartaColonna
  71.         {
  72.             get { return _FourthColumnText; }
  73.             set
  74.             {
  75.                 if (value == "")
  76.                     _FourthColumnText = "Quarta Colonna";
  77.                 else
  78.                     _FourthColumnText = value;
  79.             }
  80.         }
  81.  
  82.         [CategoryAttribute("Prima Colonna"), DescriptionAttribute("I valori che assume tale colonna.")]
  83.         public List<float> ValoriPrimaColonna
  84.         {
  85.             get { return _FirstColumnValues; }
  86.             set { _FirstColumnValues = value; }
  87.         }
  88.  
  89.         [CategoryAttribute("Seconda Colonna"), DescriptionAttribute("I valori che assume tale colonna.")]
  90.         public List<float> ValoriSecondaColonna
  91.         {
  92.             get { return _SecondColumnValues; }
  93.             set { _SecondColumnValues = value; }
  94.         }
  95.  
  96.         [CategoryAttribute("Terza Colonna"), DescriptionAttribute("I valori che assume tale colonna.")]
  97.         public List<float> ValoriTerzaColonna
  98.         {
  99.             get { return _ThirdColumnValues; }
  100.             set { _ThirdColumnValues = value; }
  101.         }
  102.  
  103.         [CategoryAttribute("Quarta Colonna"), DescriptionAttribute("I valori che assume tale colonna.")]
  104.         public List<float> ValoriQuartaColonna
  105.         {
  106.             get { return _FourthColumnValues; }
  107.             set { _FourthColumnValues = value; }
  108.         }
  109.  
  110.         [CategoryAttribute("Generale"), DescriptionAttribute("Il colore di ciascuna colonna.")]
  111.         public List<Color> Colori
  112.         {
  113.             get { return _ColumnsColors; }
  114.             set { _ColumnsColors = value; }
  115.         }
  116.  
  117.         [CategoryAttribute("Asse delle Ordinate"), DescriptionAttribute("Il testo da visualizzare vicino all' asse."), DefaultValueAttribute("Ordinate")]
  118.         public string TestoY
  119.         {
  120.             get { return _YAxeText; }
  121.             set
  122.             {
  123.                 if (value == "")
  124.                     _YAxeText = "Ordinate";
  125.                 else
  126.                     _YAxeText = value;
  127.             }
  128.         }
  129.  
  130.         [CategoryAttribute("Asse delle Ordinate"), DescriptionAttribute("Il valore minimo della scala sull' asse.\nDeve essere minore del valore massimo e dell' intervallo."), DefaultValueAttribute(0)]
  131.         public int ValoreMinimo
  132.         {
  133.             get { return _MinimumValue; }
  134.             set
  135.             {
  136.                 if (value < ValoreMassimo && value < Intervallo)
  137.                     _MinimumValue = value;
  138.                 else
  139.                 {
  140.                     _MinimumValue = 0;
  141.                     _MaximumValue = 100;
  142.                     _IncrementValue = 10;
  143.                 }
  144.             }
  145.         }
  146.  
  147.         [CategoryAttribute("Asse delle Ordinate"), DescriptionAttribute("Il valore massimo della scala sull' asse.\nDeve essere maggiore del valore minimo e dell' intervallo."), DefaultValueAttribute(100)]
  148.         public int ValoreMassimo
  149.         {
  150.             get { return _MaximumValue; }
  151.             set
  152.             {
  153.                 if (value > ValoreMinimo && value > Intervallo)
  154.                     _MaximumValue = value;
  155.                 else
  156.                 {
  157.                     _MinimumValue = 0;
  158.                     _MaximumValue = 100;
  159.                     _IncrementValue = 10;
  160.                 }
  161.             }
  162.         }
  163.  
  164.         [CategoryAttribute("Asse delle Ordinate"), DescriptionAttribute("L' intervallo tra un valore e l'altro della scala.\nDeve essere maggiore del valore minimo e minore del valore massimo."), DefaultValueAttribute(10)]
  165.         public int Intervallo
  166.         {
  167.             get { return _IncrementValue; }
  168.             set
  169.             {
  170.                 if (value > ValoreMinimo && value < ValoreMassimo)
  171.                     _IncrementValue = value;
  172.                 else
  173.                 {
  174.                     _MinimumValue = 0;
  175.                     _MaximumValue = 100;
  176.                     _IncrementValue = 10;
  177.                 }
  178.             }
  179.         }
  180.  
  181.         [CategoryAttribute("Asse delle Ascisse"), DescriptionAttribute("Il testo da visualizzare vicino all' asse."), DefaultValueAttribute("Ascisse")]
  182.         public string TestoX
  183.         {
  184.             get { return _XAxeText; }
  185.             set
  186.             {
  187.                 if (value == "")
  188.                     _XAxeText = "Ascisse";
  189.                 else
  190.                     _XAxeText = value;
  191.             }
  192.         }
  193.  
  194.         [CategoryAttribute("Asse delle Ascisse"), DescriptionAttribute("I valori letterali da visualizzare sull'asse.")]
  195.         public List<string> ValoriAscisse
  196.         {
  197.             get { return _XAxeValues; }
  198.             set { _XAxeValues = value; }
  199.         }
  200.     }


Ultima modifica effettuata da balto il 19/01/2010 alle 23:18
PM Quote
Avatar
Il Totem (Admin)
Guru^2


Messaggi: 3635
Iscritto: 24/01/2006

Segnala al moderatore
Postato alle 10:25
Giovedì, 21/01/2010
Dato che non puoi modificare gli specificatori a runtime, l'unica possibilità consiste nel lanciare un'eccezione quando Name non può essere cambiata. La PropertyGrid catturerà l'eccezione ne visualizzerà il testo in un messagebox.

PM Quote
Avatar
balto (Ex-Member)
Rookie


Messaggi: 44
Iscritto: 03/11/2009

Segnala al moderatore
Postato alle 10:31
Giovedì, 21/01/2010
Grazie mille Totem =)

PM Quote